﻿using KinonekoSoftware.CodariaDB.Documents.Shenanigans.Forum;
using KinonekoSoftware.Studio.Models.Shenanigans.Forums;

namespace KinonekoSoftware.Studio.Pages.Shenanigans.Previewer
{
    /// <summary>
    /// <see cref="ForumService"/> 类型实例用于为论坛功能快速提供服务。
    /// </summary>
    public class ForumService
    {
        private Discuss _discuss;

        private void Initialize()
        {
            
        }
        
        /// <summary>
        /// 创建新的帖子。
        /// </summary>
        /// <param name="msg">新帖子的原始消息。</param>
        /// <param name="callback">此操作的回调函数</param>
        /// <remarks>
        /// <para><see cref="ForumObject.Removable"/> 属性表示当前消息是否可以删除。</para>
        /// <para><see cref="Discuss"/> 元素允许用户在一个<see cref="Discuss"/>实例中引用另一个<see cref="Discuss"/> 元素。</para>
        /// <para><see cref="ForumObject.ForumID"/>属性用来表明当前的回复是另一个独立的帖子的入口，当<see cref="ForumID"/>属性不为空时，<see cref="Removable"/> 属性必须为false。</para>
        /// </remarks>
        public void NewDiscuss(ForumMSG msg, Action callback = null)
        {
            if (msg is null)
            {
                return;
            }

            //
            //
            var newDiscuss = ForumFactory.CreateDiscuss(_discuss, msg.Target);


            //
            // 设置为不可删除
            msg.Removable = false;
            msg.ForumID   = newDiscuss.Id;

            //
            //
            Platform.GetEngine<ForumEngine>().Add(newDiscuss);

            //
            //
            callback?.Invoke();
        }

        public Discuss Discuss
        {
            get => _discuss;
            set
            {
                _discuss = value;
                Initialize();
            }
        }
    }
}